#!/bin/sh /etc/rc.common
# Copyright (C) 2013-2017 OpenWrt.org

START=60
USE_PROCD=1

_log() {
	logger -p daemon.info -t prometheus-node-exporter-ucode "$@"
}

start_service() {
	. /lib/functions/network.sh

	local interface port bind4 bind6

	config_load prometheus-node-exporter-ucode.main
	config_get interface "main" listen_interface "loopback"
	config_get port "main" listen_port 9101
	config_get keepalive "main" http_keepalive 70

	[ "$interface" = "*" ] || {
		network_get_ipaddr  bind4 "$interface"
		network_get_ipaddr6 bind6 "$interface"
		[ -n "$bind4$bind6" ] || {
			_log "defering start until listen interface $interface becomes ready"
			return 0
		}
	}

	procd_open_instance

	procd_set_param command /usr/sbin/uhttpd -f -c /dev/null -h /dev/null -S -D -o /metrics -O /usr/share/ucode/node-exporter/metrics.uc

	if [ "$interface" = "*" ]; then
		procd_append_param command -p $port
	else
		[ -n "$bind4" ] && procd_append_param command -p $bind4:$port
		[ -n "$bind6" ] && procd_append_param command -p [$bind6]:$port
	fi
	[ $keepalive -gt 0 ] && procd_append_param command -k $keepalive

	procd_add_jail prometheus-node-exporter-ucode log procfs sysfs ubus
	procd_add_jail_mount "/usr/lib/uhttpd_ucode.so"
	procd_add_jail_mount "/lib/libubus.so*"
	procd_add_jail_mount "/lib/libuci.so"
	procd_add_jail_mount "/usr/lib/ucode"
	procd_add_jail_mount "/usr/lib/libnl*.so*"
	procd_add_jail_mount "/usr/share/ucode/node-exporter"
	procd_add_jail_mount "/etc/config"

	# TODO breaks the dsl collector?
	#procd_set_param user nobody
	#procd_set_param group nogroup
	procd_set_param no_new_privs 1

	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_set_param respawn

	procd_close_instance
}

service_triggers()
{
	local interface

	procd_add_reload_trigger "prometheus-node-exporter-ucode"

	config_load prometheus-node-exporter-ucode.main
	config_get interface "main" listen_interface "loopback"

	[ "$interface" = "*" ] || procd_add_reload_interface_trigger "$interface"
}
